// 星期数据
export const weekData = [
  {
    key: 0,
    value: "日",
  },
  {
    key: 1,
    value: "一",
  },
  {
    key: 2,
    value: "二",
  },
  {
    key: 3,
    value: "三",
  },
  {
    key: 4,
    value: "四",
  },

  {
    key: 5,
    value: "五",
  },
  {
    key: 6,
    value: "六",
  },
];

// 已签到数据
export const signInList = [1, 2, 11];

// 计算本月第一日是星期几
export function getFirstDayOfMonth(data) {
  let year, month;
  if (data) {
    // 解析传入的日期字符串
    const [inputYear, inputMonth] = data.split("-").map(Number);
    year = inputYear;
    // 月份在 Date 对象中是 0 - 11，所以减 1
    month = inputMonth - 1;
  } else {
    // 若未传入数据，使用当前日期
    const date = new Date();
    year = date.getFullYear();
    month = date.getMonth();
  }

  // 设置日期为指定月份的第一天
  const firstDay = new Date(year, month, 1);
  // 获取指定月份第一天是星期几，返回值 0 表示周日，1 - 6 分别表示周一到周六
  return firstDay.getDay();
}

// 获取某月天数
export function getDaysInMonth(data) {
  let year, month;
  if (data) {
    // 解析传入的日期字符串
    const [inputYear, inputMonth] = data.split("-").map(Number);
    year = inputYear;
    month = inputMonth - 1; // 月份在 Date 对象中是 0 - 11
  } else {
    // 若未传入数据，使用当前日期
    const date = new Date();
    year = date.getFullYear();
    month = date.getMonth();
  }

  // 创建一个表示下一个月第一天的 Date 对象
  const nextMonthFirstDay = new Date(year, month + 1, 1);
  // 将日期设为 0，回退到本月的最后一天
  const lastDayOfMonth = new Date(nextMonthFirstDay - 1);
  // 获取本月的天数
  return lastDayOfMonth.getDate();
}

// 获取本月所有日期
/**
 *
 * @param {data} 获取某个月份所有日期，格式为 yyyy-mm
 * @param {list} 已签到的日期列表，格式为 dd，如：[1,2,3,4...]
 * @returns
 */
export function getDaysInCurrentMonth(data, list = []) {
  // 获取当月的天数
  let dayNum = getDaysInMonth(data);
  // 获取当月第一天是星期几
  let firstDay = getFirstDayOfMonth(data);
  // 创建一个空数组来存储所有日期
  const days = Array.from({ length: dayNum + firstDay }, (_, i) => {
    return {
      key: i,
      // 日期
      value: firstDay > i ? "" : i + 1 - firstDay,
      // 是否已签到
      isSign: firstDay > i ? false : list.includes(i + 1 - firstDay),
    };
  });
  return days;
}

// 追加已签到数据
export function appendSignInList(data) {
  signInList.push(data);
}
